package middleware

//import (
//	"net/http"
//	"net/url"
//	"time"
//
//	"zhiyun-tech.com/servers/pkg/logger"
//
//	signature2 "zhiyun-tech.com/servers/apps/common/signature"
//
//	"github.com/gin-gonic/gin"
//	"zhiyun-tech.com/servers/apps/common/http/errcode"
//	"zhiyun-tech.com/servers/apps/common/http/httputil"
//	"zhiyun-tech.com/servers/pkg/utils"
//)
//
////返回数据的统一封装中间件
//func Response() gin.HandlerFunc {
//	return func(c *gin.Context) {
//		st := time.Now()
//		c.Next()
//		if c.Writer.Status() != http.StatusOK && c.Writer.Status() != 0 {
//			return
//		}
//		if c.Writer.Written() {
//			return
//		}
//
//		_, ok := c.Keys["errcode"]
//		if !ok {
//			c.Set("errcode", errcode.SUCCESS)
//		}
//		_, ok = c.Keys["errmsg"]
//		if !ok {
//			c.Set("errmsg", "success")
//		}
//
//		c.Set("ts", utils.FmtUsedTime(st))
//
//		// 当前登录用户信息
//		delete(c.Keys, "$user")
//		// c.ShouldBindBodyWith 方法会传入此键
//		delete(c.Keys, "_gin-gonic/gin/bodybyteskey")
//
//		params := c.Keys
//		c.JSON(http.StatusOK, params)
//	}
//}
//
//// 校验接口调用权限
//// signature生成规则: 构建json字符串{"appkey":"***","timestamp":131232}->aes-CBC加密并base64->urlencode
//// appKey := "zhiyun_server"
////	appSecret := "nzxI6F3JIuOUKiMY"
////	type signatureData struct {
////		AppKey    string `json:"appkey"`
////		Timestamp int64  `json:"timestamp"`
////	}
////
////	s := signatureData{
////		AppKey:    appKey,
////		Timestamp: time.Now().Unix(),
////	}
////	sbytes, _ := json.Marshal(&s)
////	jsonstr := string(sbytes)
////	t.Log(jsonstr)
////
////	ret, err := AesEcryptWithBase64(sbytes, appSecret)
////	if err != nil {
////		t.Error(err)
////	}
////	ret2 = url.QueryEscape(ret) //最终使用的结果
//func Authorization() gin.HandlerFunc {
//	return Authorization2(30)
//}
//
//func Authorization2(minutes int) gin.HandlerFunc {
//	return func(c *gin.Context) {
//		defer func() {
//			if err := recover(); err != nil {
//				httputil.GinErrorWithMsg(c, errcode.NO_PERMISSION, "无权访问，校验签名发生错误!")
//				c.Abort()
//				return
//			}
//		}()
//		signature := c.Query("signature")
//		if signature == "" {
//			signature = c.PostForm("signature")
//			if signature != "" {
//				signature, _ = url.QueryUnescape(signature)
//			}
//		}
//		if signature == "" {
//			signature = c.GetHeader("signature")
//			if signature != "" {
//				signature, _ = url.QueryUnescape(signature)
//			}
//		}
//
//		if !signature2.VerifyServiceSignatureWithTimeout(signature, minutes, c) {
//			return
//		}
//		c.Next()
//	}
//}
//
//func AuthorizationApp(minutes int) gin.HandlerFunc {
//	return func(c *gin.Context) {
//		defer func() {
//			if err := recover(); err != nil {
//				httputil.GinErrorWithMsg(c, errcode.NO_PERMISSION, "无权访问，校验签名发生错误!")
//				c.Abort()
//				return
//			}
//		}()
//		signature := c.Query("signature")
//		if signature == "" {
//			signature = c.PostForm("signature")
//			if signature != "" {
//				signature, _ = url.QueryUnescape(signature)
//			}
//		}
//		if signature == "" {
//			signature = c.GetHeader("signature")
//			if signature != "" {
//				signature, _ = url.QueryUnescape(signature)
//			}
//		}
//
//		if !signature2.VerifyServiceSignature2(signature, signature2.SIGNATURE_APPKEY, signature2.SIGNATURE_APPSECRET, minutes, c) {
//			return
//		}
//		c.Next()
//	}
//}
//
//////// 跨域
//func Cors() gin.HandlerFunc {
//	return Cors2(nil)
//}
//
//func Cors2(allowOrigins []string) gin.HandlerFunc {
//	return func(c *gin.Context) {
//		origin := c.Request.Header.Get("origin")
//		if allowOrigins != nil && len(allowOrigins) > 0 {
//			hasFind := false
//			for _, v := range allowOrigins {
//				if v == origin {
//					hasFind = true
//					break
//				}
//			}
//			if !hasFind {
//				logger.Warnln("不支持的跨域请求：", origin)
//				origin = ""
//			}
//		}
//		if origin != "" {
//			//接收客户端发送的origin （重要！）
//			c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
//			//服务器支持的所有跨域请求的方法
//			c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE")
//			//允许跨域设置可以返回其他子段，可以自定义字段
//			//c.Header("Access-Control-Allow-Headers", "*")
//			acrheaders := c.GetHeader("access-control-request-Headers")
//			if acrheaders != "" {
//				c.Header("Access-Control-Allow-Headers", acrheaders)
//			} else {
//				c.Header("Access-Control-Allow-Headers", "*")
//			}
//			// 允许浏览器（客户端）可以解析的头部 （重要）
//			c.Header("Access-Control-Expose-Headers", "*")
//			//设置缓存时间
//			c.Header("Access-Control-Max-Age", "60")
//			//允许客户端传递校验信息比如 cookie (重要)
//			c.Header("Access-Control-Allow-Credentials", "true")
//			//放行所有OPTIONS方法
//			if c.Request.Method == "OPTIONS" {
//				c.AbortWithStatus(http.StatusNoContent)
//				return
//			}
//		}
//
//		c.Next()
//	}
//}
